The term “layout” in user interface application platforms refers to the sizes and positions of user interface elements, such as text boxes, buttons, image boxes, and so forth. Layout has traditionally been a very difficult problem to solve in terms of the balance between power and simplicity. Typically, the more powerful a layout system, the more complex it needs to be. However, as the complexity of the system increases, so does the investment a user interface scene designer has to make in becoming educated as to the behavior of the system. The cost of the investment can be prohibitive, whereby a scene designer may settle for a simpler but less powerful layout solution.
For example, layout needs logic to handle dynamic changes. Consider that as elements or windows are resized by a user, the sizes and positions need to change, and some elements may even be removed or added back to the user interface view. Less dynamic, but still variable changes occur when the user interface language is changed as part of globalizing a program. What may be a short string on an element in one language may be a long string when translated to another language.
Even when dealing with the same language, another example of a significant problem of user interface is that the sizes of user interface elements are not always known ahead of time. Text and other content that needs to be displayed can be obtained dynamically, and thus may be variable in size.
With respect to elements that are arranged together, such as in columns and rows, there are further layout-related challenges. For example, consider a grid of rows and columns in which an element sizes itself to the content that is to be displayed in that element. Elements corresponding to a column in another row will no longer align properly in such a scenario. Similar alignment problems occur when the scene designer forces an element to a particular size, or when a user resizes a column header by dragging it. Still further complications arise with elements based on styles and the like, (where styles refer to templates such as style sheets that allow a scene designer to define default property settings once for multiple elements); multiple elements may be copied from the same style, but not otherwise related to one another, and thus typically should not align in grids simply because of the style relationship.
In general, what is needed is a way for layout to handle size changes to elements aligned in tables/grids of columns and rows. The solution should be flexible as well as straightforward for scene designers to use, so that scene designers can keep essentially unrelated elements independent as desired, including elements related only by having been created from a common template.